package main;

import java.util.ArrayList;

import dbdao.DBaseManager;
import items.*;
import htmldao.*;

public class UpdateRanking 
{
	private ArrayList<String> lTablas;
	private ArrayList<String> lSQL;
	private ArrayList<HTML> lHTML;
	private RankingList lRI;
	private boolean test;
	
	public UpdateRanking(boolean isReal)
	{
		test = isReal;
		
		lTablas = new ArrayList<String>();
		lTablas.add("moviles");
		lTablas.add("smartphone");
		lTablas.add("tablets");
		lTablas.add("ebook");
		lTablas.add("tv");
		lTablas.add("portatiles");
		lTablas.add("ordenadores");
		lTablas.add("impresoras");
		lTablas.add("reflex");
		lTablas.add("fotos");
		lTablas.add("micro");
		lTablas.add("frigo");
		lTablas.add("lavadoras");
		lTablas.add("lavavajillas");
		
		initRanking();
	}
	
	public UpdateRanking( ArrayList<String>lTablas , boolean isReal )
	{
		test = isReal;
		
		this.lTablas = lTablas;
		
		initRanking();
	}
	
	private void initRanking()
	{
		try
		{
			lHTML = new ArrayList<HTML>();
			for( int i=0 ; i<lTablas.size() ; i++ )
			{
				ArrayList<HTMLtag> alht = new ArrayList<HTMLtag>();
				alht.add(new HTMLtag("td","id"));
				alht.add(new HTMLtag("td","nota"));
				lHTML.add(new HTML("http://localhost/ranking/ranking.php?tabla="+lTablas.get(i),alht));
			}
		}
		catch( Exception e )
		{
			e.printStackTrace();
		}
		
		lRI = new RankingList();
		for( int i=0 ; i<lHTML.size() ; i++ )
		{
			try
			{
				ArrayList<TagElement> alte = lHTML.get(i).getLElements();
				for( int j=0 ; j<alte.get(1).size() ; )
					if( alte.get(1).get(j).indexOf('*')>-1 )
					{
						alte.get(0).remove(j);
						alte.get(1).remove(j);
					}
					else
					{
						lRI.add(new RankingItem( Integer.parseInt(alte.get(0).get(j)) , Float.parseFloat(alte.get(1).get(j)) , lTablas.get(i) ));
						j++;
					}
			}
			catch( Exception e )
			{
				System.out.println("Pete para la url: " + lHTML.get(i).getURL());
				e.printStackTrace();
			}
		}
		
		lSQL = new ArrayList<String>();
		for( int i=0 ; i<lRI.size() ; i++ )
		{
			lSQL.add(lRI.get(i).getSQL(i));
		}
		
		updateDB();
	}
	
	private void updateDB()
	{
		if( !test )	//PRUEBA: mostrar las sentencias SQL
			for( int i=0 ; i<lSQL.size() ; i++ )
				System.out.println(lSQL.get(i));
		else
			new DBaseManager().updateElements(lSQL);
	}
}
